home *** CD-ROM | disk | FTP | other *** search
- TITLE Square Root (EX44.ASM)
- PAGE ,132
- OUR_CODE SEGMENT PARA 'CODE'
- PUBLIC SQRT32
- SQRT32 PROC FAR
- ASSUME CS:OUR_CODE
- PUSH BP ;Save contents of BP
- PUSH DX ; and source number DX:AX
- PUSH AX
- MOV BP,SP ;BP points to AX on the stack
- MOV BX,200 ;As a first approx,
- DIV BX ; divide source number by 200,
- ADD AX,2 ; then add 2
- NXT_APP: MOV BX,AX ;Save this approx. in BX
- MOV AX,[BP] ;Read source number again
- MOV DX,[BP+2]
- DIV BX ;Divide by last approx.
- ADD AX,BX ;Average last two approxs.
- SHR AX,1
- CMP AX,BX ;Last two approxs. identical?
- JE DONE
- SUB BX,AX ; No. Check for diff. of 1
- CMP BX,1
- JE DONE
- CMP BX,-1
- JNE NXT_APP
- DONE: MOV BX,AX ;Put result in BX
- POP AX ;Restore source number
- POP DX
- POP BP ; and scratch register BP
- RET
- SQRT32 ENDP
- OUR_CODE ENDS
- END SQRT32
-